package s7m

class UsuarioController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST", login:"POST"]

    def index = {
        redirect(action: "list", params: params)
    }

    /*
 *  Acesso ao sistema
 *  - Login: Efetua o login do usuário no sistema
 *  - Logout: Fecha a sessão do usuário
 */
    def login = {
        // Procura o usuario na base de dados
        def usuario = Usuario.findByMatriculaAndSenha(params.login, params.senha)
        println(usuario.tipoUsuario)
        println(usuario.matricula)
        println(usuario.senha)
        if (usuario) {
            // Abre a session do usuário
            session.usuario = usuario
            // Redireciona para a sua devida página inicial dependendo do seu tipo
            if (session.usuario.tipoUsuario == "Aluno") {
              redirect(uri:"/aluno/escolherDisciplinas/")
            } else if (session.usuario.tipoUsuario == "COORDENADOR") {
              redirect(uri:"")
            } else if (session.usuario.tipoUsuario == "PROFESSOR") {
              redirect(uri:"")
            }
        } else {
            flash['error']="${message(code:'error.login.incorreto')}"
            redirect(uri:'')
        }
    }
    def escolherDisciplinas =
    {
       
    }
    def logout = {
        session.usuario = null
        flash['message'] = "${message(code:'info.logout.sucesso')}"
        redirect(uri:'')
    }

/*
 *  Modificações do perfil do usuário
 *  - Perfil: Página de alteração dos dados do usuário
 *  - alterarDados: Altera os dados do perfil do usuário
 */
    def perfil = {
        if(!session.usuario) {
            flash['error'] = "${message(code:'error.login.deslogado')}"
            redirect(uri:'')
        }
    }
 
    def list = {
        params.max = Math.min(params.max ? params.int('max') : 10, 100)
        [usuarioInstanceList: Usuario.list(params), usuarioInstanceTotal: Usuario.count()]
    }

    def create = {
        def usuarioInstance = new Usuario()
        usuarioInstance.properties = params
        return [usuarioInstance: usuarioInstance]
    }

    def save = {
        def usuarioInstance = new Usuario(params)
        if (usuarioInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])}"
            redirect(action: "show", id: usuarioInstance.id)
        }
        else {
            render(view: "create", model: [usuarioInstance: usuarioInstance])
        }
    }

    def show = {
        def usuarioInstance = Usuario.get(params.id)
        if (!usuarioInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
        else {
            [usuarioInstance: usuarioInstance]
        }
    }

    def edit = {
        def usuarioInstance = Usuario.get(params.id)
        if (!usuarioInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
        else {
            return [usuarioInstance: usuarioInstance]
        }
    }

    def update = {
        def usuarioInstance = Usuario.get(params.id)
        if (usuarioInstance) {
            if (params.version) {
                def version = params.version.toLong()
                if (usuarioInstance.version > version) {
                    
                    usuarioInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'usuario.label', default: 'Usuario')] as Object[], "Another user has updated this Usuario while you were editing")
                    render(view: "edit", model: [usuarioInstance: usuarioInstance])
                    return
                }
            }
            usuarioInstance.properties = params
            if (!usuarioInstance.hasErrors() && usuarioInstance.save(flush: true)) {
                flash.message = "${message(code: 'default.updated.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])}"
                redirect(action: "show", id: usuarioInstance.id)
            }
            else {
                render(view: "edit", model: [usuarioInstance: usuarioInstance])
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
    }

    def delete = {
        def usuarioInstance = Usuario.get(params.id)
        if (usuarioInstance) {
            try {
                usuarioInstance.delete(flush: true)
                flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                redirect(action: "list")
            }
            catch (org.springframework.dao.DataIntegrityViolationException e) {
                flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                redirect(action: "show", id: params.id)
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
    }
    
}
